package in.view.delegate;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Parcelable;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.PopupMenu;
import android.widget.PopupMenu.OnMenuItemClickListener;
import android.widget.Toast;
import java.util.Random;
import in.controller.adapter.base.RobinAdapter;
import in.controller.handler.PostDialogResponseHandler;
import in.lib.Constants;
import in.lib.manager.APIManager;
import in.lib.manager.SettingsManager;
import in.lib.manager.UserManager;
import in.lib.utils.ViewUtils;
import in.model.Post;
import in.rob.client.R;
import in.rob.client.dialog.DeletePostDialog;
import in.rob.client.dialog.QuotePostDialog;
import in.rob.client.dialog.ReplyPostDialog;
import in.view.delegate.base.AdapterDelegate;
import in.view.holder.PostHolder;
public class PostDelegate extends AdapterDelegate<Post> implements OnClickListener
{
public PostDelegate(RobinAdapter<Post> adapter)
{
super(adapter);
}
public int getLayout()
{
return R.layout.post_view;
}
@Override public View getView(Post item, int position, View convertView, ViewGroup parent, LayoutInflater inflater)
{
PostHolder holder;
if (convertView == null)
{
convertView = inflater.inflate(getLayout(), parent, false);
holder = new PostHolder(convertView);
holder.getReply().setOnClickListener(this);
holder.getReplyAll().setOnClickListener(this);
holder.getRepost().setOnClickListener(this);
holder.getShare().setOnClickListener(this);
holder.getMore().setOnClickListener(this);
convertView.setTag(holder);
}
else
{
holder = (PostHolder)convertView.getTag();
}
convertView.setTag(R.id.TAG_POSITION, position);
holder.populate(item);
return convertView;
}
@Override public void onClick(final View v)
{
final int position = (Integer)ViewUtils.getParentWithId(R.id.root_view, v).getTag(R.id.TAG_POSITION);
final Post item = getAdapter().getItem(position);
if (v.getId() == R.id.reply || v.getId() == R.id.reply_all)
{
Intent replyIntent = new Intent(v.getContext(), ReplyPostDialog.class);
replyIntent.putExtra(Constants.EXTRA_POST, (Parcelable)item);
replyIntent.putExtra(Constants.EXTRA_REPLY_ALL, v.getId() == R.id.reply_all);
v.getContext().startActivity(replyIntent);
}
else if (v.getId() == R.id.repost)
{
onRepostClick(v, item);
}
else if (v.getId() == R.id.share)
{
String originalText = item.getPostText().getText();
String shareText = originalText + " via @" + item.getPoster().getUsername() + " " + item.getCanonicalUrl();
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, shareText);
shareIntent.setType("text/plain");
v.getContext().startActivity(Intent.createChooser(shareIntent, v.getContext().getString(R.string.share_via)));
}
else if (v.getId() == R.id.more)
{
onMoreClick(v, item);
}
}
protected void onMoreClick(final View view, final Post item)
{
final PopupMenu options = new PopupMenu(view.getContext(), view);
options.getMenuInflater().inflate(R.menu.menu_post_more, options.getMenu());
if (item.isMention())
{
options.getMenu().findItem(R.id.menu_mute).setVisible(true);
}
if (item.getHasReplies())
{
options.getMenu().findItem(R.id.menu_collapse).setVisible(true);
}
if (item.getPoster().equals(UserManager.getInstance().getUser())
|| UserManager.getInstance().getLinkedUserIds().contains(item.getPoster().getId())
|| item.getReposters().contains(UserManager.getInstance().getUser()))
{
options.getMenu().findItem(R.id.menu_delete).setVisible(true);
}
options.setOnMenuItemClickListener(new OnMenuItemClickListener()
{
@Override public boolean onMenuItemClick(MenuItem menuItem)
{
if (menuItem.getItemId() == R.id.menu_collapse)
{
SettingsManager.getInstance().collapseThread(item.getThreadId());
getAdapter().notifyDataSetChanged();
}
else if (menuItem.getItemId() == R.id.menu_delete)
{
Intent deletePost = new Intent(view.getContext(), DeletePostDialog.class);
deletePost.putExtra(Constants.EXTRA_POST, item);
view.getContext().startActivity(deletePost);
}
else if (menuItem.getItemId() == R.id.menu_translate)
{
String originalText = item.getPostText().getText();
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://translate.google.com/?q=" + Uri.encode(originalText)));
view.getContext().startActivity(intent);
}
else if (menuItem.getItemId() == R.id.menu_copy_text)
{
String originalText = item.getPostText().getText();
android.content.ClipboardManager clipboard = (android.content.ClipboardManager)view.getContext().getSystemService(Context.CLIPBOARD_SERVICE);
android.content.ClipData clip = android.content.ClipData.newPlainText("Copied Text", originalText);
clipboard.setPrimaryClip(clip);
Toast.makeText(view.getContext(), view.getContext().getString(R.string.copy_text_success), Toast.LENGTH_SHORT).show();
}
options.dismiss();
return true;
}
});
options.show();
}
protected void onRepostClick(final View v, final Post item)
{
final PopupMenu options = new PopupMenu(v.getContext(), v);
if (!item.getPoster().equals(UserManager.getInstance().getUser())
&& !UserManager.getInstance().getLinkedUserIds().contains(item.getPoster().getId())
&& !item.getReposters().contains(UserManager.getInstance().getUser()))
{
options.getMenu().add(0, 0, 0, "Repost");
}
options.getMenu().add(0, 1, 0, "Quote");
options.setOnMenuItemClickListener(new OnMenuItemClickListener()
{
@Override public boolean onMenuItemClick(MenuItem menuItem)
{
if (menuItem.getItemId() == 0)
{
APIManager.getInstance().postRepost(item.getId(), new PostDialogResponseHandler(v.getContext(), new Random().nextInt())
{
@Override public String getNotificationTitle()
{
return getContext().getString(R.string.reposting_title);
}
@Override public String getNotificationText()
{
return getContext().getString(R.string.reposting);
}
@Override public String getNotificationFinishText()
{
return getContext().getString(R.string.repost_success);
}
});
}
else if (menuItem.getItemId() == 1)
{
Intent quoteIntent = new Intent(v.getContext(), QuotePostDialog.class);
quoteIntent.putExtra(Constants.EXTRA_POST, (Parcelable)item);
v.getContext().startActivity(quoteIntent);
}
options.dismiss();
return true;
}
});
options.show();
}
@Override public boolean onItemLongClick(int position, View view)
{
toggleOptions(position, view);
return true;
}
public void toggleOptions(int position, View view)
{
Post item = getAdapter().getItem(position);
PostHolder holder = (PostHolder)view.getTag();
int count = getAdapter().getListView().getChildCount();
for (int index = 0; index < count; index++)
{
View options;
if ((options = getAdapter().getListView().getChildAt(index).findViewById(R.id.options_container)) != null)
{
options.setVisibility(View.GONE);
}
}
int visibility = view.findViewById(R.id.options_container).getVisibility() == View.GONE ? View.VISIBLE : View.GONE;
view.findViewById(R.id.options_container).setVisibility(visibility);
}
}